package generatorWektorow;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import typydanych.Wektor;

public class ParserWektorow {
	
	public List<Wektor> wczytajWektory(String sciezkaPliku) throws IOException{
		List<Wektor> listaWektorow = new ArrayList<Wektor>();
		String zawartosc = wczytajPlikTekstowy(sciezkaPliku);
		String[] linieTekstu = fragmentLancucha(zawartosc, "\r\n");
		
		for(int i = 0; i<linieTekstu.length; i++) {
			Wektor wektor = pobierzWartosciWektora(linieTekstu[i]);
			listaWektorow.add(wektor);
		}
		
		return listaWektorow;
	}
		
	public void zapiszWektory(String sciezkaPliku, List<Wektor> listaWektorow) throws IOException{
		StringBuilder zawartosc = new StringBuilder();
		for (Wektor wektor : listaWektorow) {
			zawartosc.append(wektor.toString()+"\r\n");
		}
		zapiszPlikTekstowy(sciezkaPliku, zawartosc.toString());
	}
	
	private String wczytajPlikTekstowy(String sciezkaPliku) throws IOException{
		File plik = new File(sciezkaPliku);
		StringBuilder zawartosc = new StringBuilder();
		String str;
		BufferedReader in = new BufferedReader(new FileReader(plik));
		while((str = in.readLine()) != null) {
			zawartosc.append(str+"\r\n");
		}
		in.close();
		return zawartosc.toString();
	}
	
	private void zapiszPlikTekstowy(String sciezkaPLiku, String zawartosc) throws IOException{
		File plik = new File(sciezkaPLiku);
		BufferedWriter out = new BufferedWriter(new FileWriter(plik, false));
		out.write(zawartosc, 0, zawartosc.length());
		out.close();
		
	}
	
	private String[] fragmentLancucha(String content, String regex) {
		
		String[] tmp = content.split(regex);
		String[] sub = new String[tmp.length];
		for(int i=0; i<tmp.length; i++) {
			if(!tmp[i].equalsIgnoreCase("")){
				sub[i] = (tmp[i].trim());
			}
		}
		return sub;
	}
	
	private Wektor pobierzWartosciWektora(String lancuch) throws NumberFormatException {
		
		
		int index = 0;
		byte etykieta = -1;
		
		int indeksEtykiery = lancuch.indexOf("[");
		if(indeksEtykiery>-1){
			etykieta = Byte.parseByte(lancuch.substring(indeksEtykiery+1, lancuch.indexOf("]")));
		}
		lancuch = lancuch.substring(
									lancuch.indexOf("<", index)+1, 
									lancuch.indexOf(">", index)
									);
		String[] tmp = lancuch.split(",");
		int rozmiarWektora = tmp.length;
		float[] wektorWartosci = new float[rozmiarWektora];
		
		for (int i = 0; i < tmp.length; i++) {
			wektorWartosci[i] = Float.parseFloat(tmp[i]);
		}
		Wektor wektor = new Wektor(rozmiarWektora);
		wektor.setWektor(wektorWartosci);
		wektor.setEtykieta(etykieta);
		
		return wektor;
		
	}
	
}
